package com.nifostasky.pattern.producer;

import com.nifostasky.pattern.config.RabbitDirectConfig;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

/**
 * 路由模式/直连交换机模式:
 *  相比发布订阅模式，Exchange和Queue之间多了个路由关系，此时的交换机类型为：直连交换机（Direct Exchange）。
 *
 * 队列和交换机不是任意绑定了，而是要指定一个Routingkey。
 *
 * 生产者在向Exchange发送消息时，也必须指定消息的RoutingKey。
 *
 * Exchange不再把消息交给每一个绑定的队列，而是根据消息的Routing Key进行判断，只有队列的Routingkey与消息的 Routing key完全一致，才会接收到消息。
 *
 */
@Component
public class DirectProducerPattern {
    @Autowired
    private RabbitTemplate rabbitTemplate;

    public void sendWithDirect() {
        rabbitTemplate.convertAndSend(RabbitDirectConfig.EXCHANGE_NAME, "insert", "diect insert mq hello~~~");
        rabbitTemplate.convertAndSend(RabbitDirectConfig.EXCHANGE_NAME, "update", "diect update mq hello~~~");
        // 指定一个没有配置的routingKey 看消费方能不能接收消息
        rabbitTemplate.convertAndSend(RabbitDirectConfig.EXCHANGE_NAME, "delete", "diect update mq hello~~~");
    }
}
